package com.rxmvp.baselibrary.base;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.rxmvp.baselibrary.base.mvp.BaseFragment;

import java.util.List;

/**
 * 所有Fragment的基类
 */
public abstract class BaseViewPagerFragment extends BaseFragment {

    private LoadingPager mLoadingPager;

    @Override
    public View getRootView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        if (mLoadingPager == null) {
            mLoadingPager = new LoadingPager(getContext()) {
                @Override
                protected void loadData() {
                    getDataFromServer();
                }

                @Override
                public View onCreateSuccessView() {
                    return BaseViewPagerFragment.this.onCreateSuccessView();
                }

            };
        }

        return mLoadingPager;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        /**首次进入应用时，对“首页”进行首次加载*/
        //如果fragment是HomeFragment类型，并且first为true，则为首次加载，之后不再执行首次加载方法。
        // 不在此加载数据，是因为ViewPager的预加载会让还没显示的fragment提前创建，加载网络数据，如果用户不看下一页的数据，
        // 那么预加载就会造成流量的浪费，所以fragment的数据加载在ViewPager的监听器中实现，只有选中的页面才会加载数据。
        onFirstLoadData();
    }

    /** 首次加载数据 */
    protected abstract void onFirstLoadData();

    /** 从服务器中获取数据，该方法又子类fragment实现 */
    protected abstract LoadingPager.LoadResult getDataFromServer();

    /** 加载成功的页面，又子类fragment实现 */
    public abstract View onCreateSuccessView();

    /** 校验数据 */
    public LoadingPager.LoadResult checkData(List datas) {
        if(datas==null){
            return LoadingPager.LoadResult.STATE_ERROR;//  请求服务器失败
        }else{
            if(datas.size()==0){
                return LoadingPager.LoadResult.STATE_EMPTY;
            }else{
                return LoadingPager.LoadResult.STATE_SUCCESS;
            }
        }
    }
}
